// index.js - 登录注册页面
import { Serve, admin } from '../../utils/index'
const validSignForm = ({ role, name, username, password, identification }) => {
  // 用户名不可为空
  if (!username) {
    wx.showToast({
      title: '账号不可为空',
      icon: 'error',
      mask: true
    })
    return false
  }
  // 用户名不可过短
  if (username.length < 5) {
    wx.showToast({
      title: '账号长度至少为5位',
      icon: 'error',
      mask: true
    })
    return false
  }
  // 密码不可为空
  if (!password) {
    wx.showToast({
      title: '密码不可为空',
      icon: 'error',
      mask: true
    })
    return false
  }
  // 密码长度至少为6位
  if (password.length < 6) {
    wx.showToast({
      title: '密码长度至少为6位',
      icon: 'error',
      mask: true
    })
    return false
  }

  // 身份必填
  if (!role) {
    wx.showToast({
      title: '身份还未选择',
      icon: 'error',
      mask: true
    })
    return false
  }

  // 姓名必填
if (!role) {
    wx.showToast({
      title: '请填写姓名',
      icon: 'error',
      mask: true
    })
    return false
  }

  // 学号/工号必填
  if (!role) {
    wx.showToast({
      title: '学号/工号不可为空',
      icon: 'error',
      mask: true
    })
    return false
  }

  return true
}
Page({

  data: {
    // 登录表单
    loginForm: {
      username: '',
      password: '',
    },
    // 注册表单
    signForm: {
      username: '',
      password: '',
      role: '',
      identification: '',
      name: ''
    },
    active: null,
    // 登录面板动画对象
    loginAnimation: null,
    // 注册面板动画对象
    signAnimation: null
  },

  // 进入管理员面板
  enterAdmin() {
    const openid = wx.getStorageSync('openid')
    if (admin.includes(openid)) {
      wx.navigateTo({
        url: '../admin/dashboard/index'
      })
    } else {
      wx.showToast({ title: '您不是管理员', icon: 'error', })
    }
  },

  // 控制登录账号输入
  handleLoginUsernameInput(e) {
    const { loginForm } = this.data
    loginForm.username = e.detail.value
    this.setData({ loginForm })
  },
  // 控制登录密码输入
  handleLoginPasswordInput(e) {
    const { loginForm } = this.data
    loginForm.password = e.detail.value
    this.setData({ loginForm })
  },

  // 登录按钮点击事件
  async login() {
    const { loginForm: { username, password } } = this.data
    // 表单检测
    if (!username) {
      wx.showToast({ title: '请填写账号', icon: 'error' ,mask: true })
      return 0
    }
    if (!password) {
      wx.showToast({ title: '请填写密码', icon: 'error' ,mask: true })
      return 0
    }   
    wx.showLoading({ title: '验证账号密码', mask: true,  })
    // 登录逻辑
    const user = await Serve.Login({ username, password })
    wx.hideLoading()
    if (!user) {
      // 如果登录失败
      wx.showToast({
        title: '未查询到用户',
        mask: true,
        icon: 'error'
      })
      return
    } else {
      // 如果登录成功
      wx.showToast({ title: '正在进入系统', icon: 'loading', mask: true })
      const { name, avatar, role, identification, openid, username, password } = user

      wx.setStorageSync('name', name)
      wx.setStorageSync('avatar', avatar)
      wx.setStorageSync('role', role)
      wx.setStorageSync('identification', identification)
      wx.setStorageSync('openid', openid)
      wx.setStorageSync('username', username)
      wx.setStorageSync('password', password)

      wx.switchTab({
        url: '/pages/home/index',
      })
    }
  },

  // 注册按钮点击事件
  showSignUp() {
    // 创建注册面板动画对象
    const signAnimation = wx.createAnimation({
      duration: 400,
      timingFunction: 'ease-out'
    })

    // 创建登录面板动画对象
    const loginAnimation = wx.createAnimation({
      duration: 400,
      timingFunction: 'ease-out'
    })

    // 隐藏登录面板
    loginAnimation.opacity(0).translateY(-300).step()
    // 显示注册面板
    signAnimation.translateX(-500).opacity(1).step()

    this.setData({
      loginAnimation: loginAnimation.export(),
      signAnimation: signAnimation.export()
    })

    // 更改navigationBarColor
    wx.setNavigationBarColor({
      backgroundColor: '#fff',
      frontColor: '#000000',
    })
    // 更改navigationBarTitle
    wx.setNavigationBarTitle({
      title: '注册面板',
    })
  },

  // 显示登录面板
  showLogin() {
    // 创建登录面板动画对象
    const loginAnimation = wx.createAnimation({
      duration: 400,
      timingFunction: 'ease-out'
    })
    // 创建注册面板动画对象
    const signAnimation = wx.createAnimation({
      duration: 400,
      timingFunction: 'ease-out'
    })
    // 隐藏注册面板
    signAnimation.opacity(0).translateX(500).step()
    // 显示登录面板
    loginAnimation.opacity(1).translateY(0).step()

    this.setData({
      loginAnimation: loginAnimation.export(),
      signAnimation: signAnimation.export()
    })

    // 更改navigationBarColor
    wx.setNavigationBarColor({
      backgroundColor: '#4b88f7',
      frontColor: '#ffffff',
    })

    // 更改navigationBarTitle
    wx.setNavigationBarTitle({
      title: '登录面板',
    })
  },

  // 控制注册账号输入
  handleSignUsernameInput(e) {
    const { signForm } = this.data
    signForm.username = e.detail.value
    this.setData({ signForm })
  },

  // 控制注册密码输入
  handleSignPasswordInput(e) {
    const { signForm } = this.data
    signForm.password = e.detail.value
    this.setData({ signForm })
  },

  // 控制注册姓名输入
  handleSignNameInput(e) {
    const { signForm } = this.data
    signForm.name = e.detail.value
    this.setData({ signForm })
  },

  // 控制注册学号/工号输入
  handleSignIdentificationInput(e) {
    const { signForm } = this.data
    signForm.identification = e.detail.value
    this.setData({ signForm })
  },

  // 控制注册身份选择
  chooseRole(e) {
    const { signForm } = this.data
    const { role } = e.currentTarget.dataset
    signForm.role = role * 1 // 转为number类型
    this.setData({
      signForm,
      active: role
    })
  },

  // 提交注册事件
  async submitSign() {
    const { signForm } = this.data
    if (!validSignForm(signForm)) { return }
    wx.showLoading({ title: '验证已有请求', mask: true })
    const result = await wx.cloud.callFunction({ name: 'get_request' })
    wx.hideLoading()
    const flag = result.result

    switch(flag) {
      case 2: {
        wx.showToast({ title: '有正在进行中的申请, 请等待', icon: 'none', mask: true })
        return
        break
      }
      case 3: {
        wx.showToast({ title: '您已经注册过了, 无需再次注册', icon: 'none', mask: true })
        return
        break
      }
    }
    wx.showLoading({ title: '提交注册申请', mask: true })
    await Serve.AddUserRequest(signForm).then(res => {
      console.log('提交注册申请结果', res)
    })
    // 待增加: 已经提交过注册申请的判定
    wx.showToast({ title: '注册申请已发送', icon: 'success', mask: true })
    this.showLogin()
  }
})
